iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
自我挑戰組

轉職未滿一年的點點滴滴系列 第 29

[Day 29] -『 GO語言學習筆記』- 複合型別 - 切片(Slice) (I)

  • 分享至 

  • xImage
  •  

以下筆記摘錄自『 The Go Workshop 』。

切片的核心其實還是陣列,切片只是在陣列外套上一層額外的包裝,讓我們能夠建立有數字索引鍵的有序集合,也不必擔心長度問題,並且,我們可以很簡單的使用Golang的內建函式append()去新增元素,可以透過以下方法:

<新切片> = append(<切片>, <新元素>)

大部分的程式碼很少使用陣列,應盡量使用切片取裡所有的有序集合。

append()可以一次加入多個值到切片裡,因為第二個值可以接收數量不定的值:

<新切片> = append(<切片>, <新元素1>, <新元素2>,..., <新元素N>)

我們也能在append()裡面傳入一個切片,在後面加上解包算符(unpack operator),也就是...

For example,

package main

import (
	"fmt"
	"os"
)

func getPassedArgs() []string {
	var args []string
	for i := 1; i < len(os.Args); i++ {
		args = append(args, os.Args[i])
	}
	return args
}

func getLocals(extraLocals []string) []string {
	var names []string
	names = append(names, "Leo", "Fanny")
	names = append(names, extraLocals...)
	return names
}

func main() {
	names := getLocals(getPassedArgs())
	fmt.Println("名字:", names)
}
//Command line
go run . Jannet

//Output
名字: [Leo Fanny Jannet]

從切片和陣列再建立新的切片

<新切片> = <陣列或切片>[<起始索引>:<結束索引(不含)>]

範圍會從起始索引算起,一直到結束索引的前一個索引

注意!!當我們使用這種方法時,golang不會真的將資料複製到新的陣列。

For example,

package main

import "fmt"

func message() string {
	s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	m := fmt.Sprintln("元素:", s[2:7])
	return m
}

func main() {
	fmt.Print(message())
}


//Output
元素: [3 4 5 6 7]

上一篇
[Day 28] - 『轉職工作的Lessons learned』 - Cube.js(IV)
下一篇
[Day 30] -『 完賽心得』
系列文
轉職未滿一年的點點滴滴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言